#pragma once
#include "Runtime/BattleFirePrefix.h"
namespace BattleFire
{
    enum ECommandQueue :BattleFireSInt32 {
        MainQueue = 0x000,
        LocalQueue = 0x100,
        NumQueues = 2,
        QueueIndexMask = 0x100,
        QueueIndexShift = 8
    };
    enum EThreadPriorities :BattleFireSInt32 {
        NormalThreadPriority = 0x000,
        HighThreadPriority = 0x400,
        BackgroundThreadPriority = 0x800,
        NumThreadPriorities = 3,
        ThreadPriorityMask = 0xC00,
        ThreadPriorityShift = 10,
    };
    enum ETaskPriorities :BattleFireSInt32 {
        NormalTaskPriority = 0x000,
        HighTaskPriority = 0x200,
        NumTaskPriorities = 2,
        TaskPriorityMask = 0x200,
        TaskPriorityShift = 9,
    };
    enum ENamedThreads : BattleFireSInt32{
        UnusedAnchor = -1,
        RHIThread,
        AudioThread,
        GameThread,
        ActualRenderingThread = GameThread + 1,
        AnyThread = 0xff,
        ThreadIndexMask = 0xff,

        GameThread_Local = GameThread | ECommandQueue::LocalQueue,
        ActualRenderingThread_Local = ActualRenderingThread | ECommandQueue::LocalQueue,

        AnyHiPriThreadNormalTask = AnyThread | EThreadPriorities::HighThreadPriority | ETaskPriorities::NormalTaskPriority,
        AnyHiPriThreadHiPriTask = AnyThread | EThreadPriorities::HighThreadPriority | ETaskPriorities::HighTaskPriority,

        AnyNormalThreadNormalTask = AnyThread | EThreadPriorities::NormalThreadPriority | ETaskPriorities::NormalTaskPriority,
        AnyNormalThreadHiPriTask = AnyThread | EThreadPriorities::NormalThreadPriority | ETaskPriorities::HighTaskPriority,

        AnyBackgroundThreadNormalTask = AnyThread | EThreadPriorities::BackgroundThreadPriority | ETaskPriorities::NormalTaskPriority,
        AnyBackgroundHiPriTask = AnyThread | EThreadPriorities::BackgroundThreadPriority | ETaskPriorities::HighTaskPriority,
    };
}